Kubernetes是一个软件系统, 允许部署和管理容器化的应用。使用该系统,用户不需要关心如何维护实体集群关系,也不用徒手部署应用,不必烦恼应用的运行状态,只需要按照系统说明编写描述信息,k8s会按照描述信息自动维护整个集群。对用户,k8s将维护和部署集群化应用的复杂过程隐藏起来并进行了抽象,使得开发者能够更加专注于应用的开发上。同时减轻了运维人员的工作压力

工作原理

大致工作原理如下:

  1. 用户开发自己的应用, 完成后打包成容器镜像,比如Docker,发布到容器注册平台
  2. 用户编写应用描述信息,说明应用需要以怎样的组合方式进行运行
  3. 通过kubernetes控制面板将描述信息传入。kubernetes节点从容器注册平台获取用户开始发布的镜像,进行运行。
  4. 整个运行期间,kubernetes持续监控应用的部署状态是否与描述文件中的一致,如果单个节点或实例宕机了,则会自动重启该节点,从而保持应用的活跃。

kubernetes优势

  • 简化应用部署
  • 更好滴利用硬件
  • 健康检查和自我修复
  • 自动扩容

POD

对于我们来说,在Kubernetes中运行的最小单位是容器,即Docker镜像。但对于Kubernetes来说却不是这样的,它并不直接处理单个容器,而是处理多个共存容器的理念,这组容器叫做POD

一个POD的一组紧密相关的容器,他们总是同时运行在一个节点上,以及同一个linux命名空间中。

每个POD就像一台独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。

1571540756807

注意

由于Kubernetes的最小单位是POD,因此并不能列出单个容器,只能列出POD

应用发布到K8S完整流程

下面展示了一个完整的容器发布到K8S的流程

1571540922449

服务

我们的应用被打包成镜像,运行在容器中,容器在K8S中位于POD中,要访问我们的应用,就要通过IP地址访问POD,但这个IP地址是集群内部的,无法通过外网访问。

要访问到POD,就要通过服务对象将其公开。可以创建一个外部的负载均衡服务,通过负载均衡的公共IP访问POD。

服务存在的另一个关键原因,在于POD的存在可能是短暂的,可能因为K8S内部资源调配,使得一个POD被迁移到另一个节点,也可能一个POD因为某种原因挂掉或消失,存在一个稳定的服务,不管POD如何变化,都能将用户的访问转发给目标POD。

服务、POD、ReplicationController的关系

1571541562099

可以看到,我们是以POD为中心的,服务用于暴露外部IP给用户,ReplicationController用于在POD挂掉时马上重启一个新的POD。

如下展示了当存在多个POD时候的状态

1571542030561

留言

2019-10-21

⬆︎TOP